package cn.leaf.calculator;

import cn.leaf.calculator.bean.FormulationCalUnitEntity;
import cn.leaf.calculator.datasource.CalDataSources;
import org.springframework.core.convert.converter.Converter;

import java.util.List;

/**
 * 公式计算助手
 *
 * @author 李克国
 * @version 1.0.0

 */
public interface FormulaCalHelper<T> {

    /**
     * 绑定数据源
     *
     * @param dataSources 计算数据源
     */
    void bind(CalDataSources<T> dataSources);

    /**
     * 开始计算
     */
    void start();

    /**
     * 计算：实际计算逻辑，该方法会通过参数传入单个计算所用到的所有信息,包含参数，并很好的解决了其依赖冲突的问题
     *
     * @param calUnitEntity 计算单元
     */
    boolean cal(FormulationCalUnitEntity<T> calUnitEntity);

    /**
     * 获取计算结果
     *
     * @return list
     */
    List<T> getResults();

    /**
     * 设置类型转换器
     *
     * @param converter 类型转换器
     */
    void setConverter(Converter<T, FormulationCalUnitEntity<T>> converter);
}
